

{


// 1. interface 的只读属性
interface Person {
    name: string,
    age: number,
    // 初始化设置了性别之后，不允许再修改
    readonly gender: boolean
}

let obj: Person;
obj = {
    name: '张艺兴',
    age: 26,
    gender: false
}

obj.name = '迪丽热巴';
// obj.gender = true;

}


{

// 2. 给 class 设置接口
interface BoyFriend {
    name: string,
    age: number,
    readonly money: number,
    height ?: number,

    // 声明方法
    // 方式1
    func: (x: number) => number
    // 方式2
    getMoney(x: number): number
}

//  implements   /ˈɪmplɪm(ə)nts/   实现了
// 基于指定的接口，实现出某一个实际的class类

class Person implements BoyFriend {
    // 先声明再赋值
    name: string;
    age: number;
    money: number;

    constructor(n: string, a: number, m: number) {
        this.name = n;
        this.age = a;
        this.money = m;
    }

    func(n: number): number {
        return n;
    }

    getMoney(x: number): number {
        return x
    }

    mineFn() {
        console.log(100);
    }
}


/*

    a. 如果是普通的对象，那么接口描述的东西不能多也不能少
    b. 如果是class的实例
            接口声明的东西一定得有，但是增加的东西可以多可以少
*/


}